/* SignalMLCodec.java created 2007-09-18
 *
 */

package org.signalml.codec;

import org.apache.log4j.Logger;

/** SignalMLCodec
 *
 *
 * @author Michal Dobaczewski &copy; 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
 * 		based on code Copyright (C) 2003 Dobieslaw Ircha <dircha@eranet.pl> Artur Biesiadowski <abies@adres.pl> Piotr J. Durka     <Piotr-J.Durka@fuw.edu.pl>
 */
public abstract class AbstractSignalMLCodec implements SignalMLCodec {

	protected static final Logger logger = Logger.getLogger(AbstractSignalMLCodec.class);

	private String formatName;
	private String description;

	// something veeeery spooky happening around this variable
	// (class files generated by the dynamic compiler disappearing from the filesystem)
	// if at all possible do not change the way this is handled
	private Class<?> readerDelegateClass = null;

	protected AbstractSignalMLCodec() {
	}

	public AbstractSignalMLCodec(String formatName) {
		super();
		this.formatName = formatName;
	}

	public String getFormatName() {
		return formatName;
	}

	public void setFormatName(String formatName) {
		this.formatName = formatName;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@Override
	public String toString() {
		return formatName;
	}

	@Override
	public SignalMLCodecReader createReader() throws SignalMLCodecException {
		synchronized (this) {
			if (readerDelegateClass == null) {
				readerDelegateClass = getReaderDelegateClass();
			}
		}
		return new SignalMLCodecReaderImpl(readerDelegateClass, this);
	}

	public abstract Class<?> getReaderDelegateClass() throws SignalMLCodecException;

}
